package com.gzj.springboot.mapper;

import com.gzj.springboot.domain.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 接口中记得添加Mapper注解
 */
@Repository
@Mapper
public interface UserMapper {
    /**
     * 查询所以信息
     * @return
     */
    public List<User> queryUserList();

    /**
     * 根据id查询用户信息
     * @param user_name
     * @return
     */
    public User queryUserById(@Param("user_name") String user_name);

    /**
     * 在这里写了两种新建用户的方式(具体查看sql语句)：
     *     1、id自增：即id每次加1这种
     *     2、利用UUID()生成id，在存入用户  SQL server 是用的NEWID()生成id的
     *     用数据库自己生成的id查询时会报错，查询不出来所以查询时尽量避免差id
     *
     * 若采用第1种方式，需要对数据库中的id字段做一些修改，将id的类型改为int型，同时定义为可以自增。
     * 若采用第2种方式，则将将id的类型改为varchar型，同时取消自增。
     *
     * 无论再用那种方式，都需要注意实体类中的类型是否与数据库一致，若不一致，项目运行时报错。
     */

    /**
     * 注册新用户（方式一）
     * @param user_name
     */
    int adduser(@Param("user_name") String user_name, @Param("password") String password, @Param("age") Integer age,@Param("addr") String addr,@Param("name") String name);

    /**
     * 注册用户方式二
     * @param user_name
     * @param password
     * @param age
     * @param addr
     * @param name
     * @return
     */
    int adduser1(@Param("user_name") String user_name, @Param("password") String password, @Param("age") Integer age,@Param("addr") String addr,@Param("name") String name);

    /**
     * 方式三 用自己生成的id
     * @param user_name
     * @param password
     * @param age
     * @param addr
     * @param name
     * @return
     */
    int adduser2(@Param("id") String id,@Param("user_name") String user_name, @Param("password") String password, @Param("age") Integer age,@Param("addr") String addr,@Param("name") String name);




    /**
     * 更新用户信息
     * @param user
     */
    public void updateUser(User user);

    /**
     * 根据id删除用户信息
     * @param id
     */
    public void deleteUser(String id);

    /**
     * 登录
     * @param user_name
     * @param password
     * @return
     */
     User login(@Param("user_name") String  user_name,@Param("password") String password);

    /**
     * 更改用户数据
     * @param name
     * @param age
     * @param addr
     * @param user_name
     * @return
     */
     int updateId(@Param("name") String name,@Param("age") Integer age,@Param("addr") String addr,@Param("user_name") String user_name);

    /**
     * 更改用户密码
     * @param password
     * @return
     */
     int updatePwd(@Param("password")String password,@Param("user_name")String user_name );

     int updatePhoto(@Param("file") String file,@Param("user_name") String user_name);
}
